﻿// 508 [CF 1355E] Restorer Distance.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*
http://oj.daimayuan.top/course/22/problem/977

给你 N个数字 h1,h2,…,hN，你需要进行一些操作使这些数字变得都一样大，操作如下：

使任意一个数字 +1，代价为 A；
使任意一个数字 −1，代价为 R；
使任意一个数字 −1 并让另一个数字 +1，代价为 M。
现在问你将这些数字变成一样的最小代价为多少。
 
输入格式
第一行 4 个整数 N,A,R,M。

接下来一行包含 N 个整数 h1,h2,...,hN。

输出格式
一行一个整数表示最小代价。

样例输入
3 1 100 100
1 3 8
样例输出
12
数据规模
对于 100% 的数据，保证 1≤N≤105,0≤A,R,M≤104,0≤ai≤109
*/

#include <iostream>


using namespace std;


int n, a[100010], A, R, M;

long long f(int x) {
	long long y = 0, z = 0;
	for (int i = 1; i <= n; i++)
		if (a[i] <= x)
			y += x - a[i];
		else
			z += a[i] - x;
	long long res = min(y, z) * M;
	if (y > z)
		res += (y - z) * A;
	else
		res += (z - y) * R;

	return res;
}

int main()
{
	cin >> n >> A >> R >> M;
	for (int i = 1; i <= n; i++)
		cin >> a[i];
	M = min(M, A + R);
	int L = 0, R = 1e9;
	while (L + 2 < R) {
		int m1 = (R - L) / 3 + L;
		int m2 = (R - L) / 3 * 2 + L;
		if (f(m1) > f(m2))
			L = m1;
		else
			R = m2;
	}
	long long ans = f(L);
	for (int i = L + 1; i <= R; i++) {
		ans = min(ans, f(i));
	}
	cout << ans << endl;

	return 0;
}

 